001 /**
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: Apr 24, 2003
005 * Time: 9:56:40 PM
006 */
007
008 package EVolve.util.phasedetectors;
009
010 import EVolve.data.*;
011 import EVolve.Scene;
012 import EVolve.util.equators.UnorderedUnlimitedSet;
013 import EVolve.visualization.XYViz.ValRefViz.HotSpotViz.HotSpotVisualization;
014 import EVolve.visualization.ReferenceDimension;
015 import java.util.*;
016
017 public class PhaseEntityTrigger {
018 private UnorderedUnlimitedSet trigger;
019 private int state[];
020 private final int triggerFound = 1;
021
022 public PhaseEntityTrigger() {
023 }
024
025 public ArrayList gatherTiggeredPhase(ArrayList data, int noiseTolerance) {
026 ArrayList phase = new ArrayList();
027 Selection activeSelection = Scene.getFilter().getActiveSelection();
028
029 if (activeSelection == null) {
030 Scene.showErrorMessage("No active selection.");
031 return phase;
032 }
033
034 state = new int[data.size()];
035 for (int i=0; i<state.length; i++) {
036 state[i] = 0;
037 }
038
039 HotSpotVisualization visual = (HotSpotVisualization)Scene.getVisualizationManager().getActiveVisualization();
040 HashMap entityName2Int = ((ReferenceDimension)visual.getDimension()[1]).getEntityName2IntMap();
041 trigger = new UnorderedUnlimitedSet();
042
043 Entity[] entities = activeSelection.getSelected();
044 for (int i=0; i<entities.length; i++) {
045 int mappedId = ((Integer)entityName2Int.get(entities[i].getName())).intValue();
046 trigger.addElement(mappedId);
047 }
048
049
050 for (int i=0; i<data.size(); i++) {
051 UnorderedUnlimitedSet current = (UnorderedUnlimitedSet)data.get(i);
052
053 if (current.intersection(trigger).size() == trigger.size() ) {
054 state[i] = triggerFound;
055 }
056 }
057
058 int noise = 0;
059 for (int i=0; i<state.length; i++) {
060 if (state[i] == triggerFound) {
061 noise ++;
062 if (noise > noiseTolerance) {
063 phase.add(new Integer(i-noise+1));
064 noise = 0;
065 }
066 } else {
067 noise = 0;
068 }
069 }
070
071 return phase;
072 }
073 }